{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Softmax exercise\n",
    "\n",
    "*Complete and hand in this completed worksheet (including its outputs and any supporting code outside of the worksheet) with your assignment submission. For more details see the [assignments page](http://vision.stanford.edu/teaching/cs231n/assignments.html) on the course website.*\n",
    "\n",
    "This exercise is analogous to the SVM exercise. You will:\n",
    "\n",
    "- implement a fully-vectorized **loss function** for the Softmax classifier\n",
    "- implement the fully-vectorized expression for its **analytic gradient**\n",
    "- **check your implementation** with numerical gradient\n",
    "- use a validation set to **tune the learning rate and regularization** strength\n",
    "- **optimize** the loss function with **SGD**\n",
    "- **visualize** the final learned weights\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import random\n",
    "import numpy as np\n",
    "from cs231n.data_utils import load_CIFAR10\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n",
    "plt.rcParams['image.interpolation'] = 'nearest'\n",
    "plt.rcParams['image.cmap'] = 'gray'\n",
    "\n",
    "# for auto-reloading extenrnal modules\n",
    "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n",
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train data shape:  (49000, 3073)\n",
      "Train labels shape:  (49000,)\n",
      "Validation data shape:  (1000, 3073)\n",
      "Validation labels shape:  (1000,)\n",
      "Test data shape:  (1000, 3073)\n",
      "Test labels shape:  (1000,)\n",
      "dev data shape:  (500, 3073)\n",
      "dev labels shape:  (500,)\n"
     ]
    }
   ],
   "source": [
    "def get_CIFAR10_data(num_training=49000, num_validation=1000, num_test=1000, num_dev=500):\n",
    "  \"\"\"\n",
    "  Load the CIFAR-10 dataset from disk and perform preprocessing to prepare\n",
    "  it for the linear classifier. These are the same steps as we used for the\n",
    "  SVM, but condensed to a single function.  \n",
    "  \"\"\"\n",
    "  # Load the raw CIFAR-10 data\n",
    "  cifar10_dir = 'cs231n/datasets/cifar-10-batches-py'\n",
    "  X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)\n",
    "  \n",
    "  # subsample the data\n",
    "  mask = range(num_training, num_training + num_validation)\n",
    "  X_val = X_train[mask]\n",
    "  y_val = y_train[mask]\n",
    "  mask = range(num_training)\n",
    "  X_train = X_train[mask]\n",
    "  y_train = y_train[mask]\n",
    "  mask = range(num_test)\n",
    "  X_test = X_test[mask]\n",
    "  y_test = y_test[mask]\n",
    "  mask = np.random.choice(num_training, num_dev, replace=False)\n",
    "  X_dev = X_train[mask]\n",
    "  y_dev = y_train[mask]\n",
    "  \n",
    "  # Preprocessing: reshape the image data into rows\n",
    "  X_train = np.reshape(X_train, (X_train.shape[0], -1))\n",
    "  X_val = np.reshape(X_val, (X_val.shape[0], -1))\n",
    "  X_test = np.reshape(X_test, (X_test.shape[0], -1))\n",
    "  X_dev = np.reshape(X_dev, (X_dev.shape[0], -1))\n",
    "  \n",
    "  # Normalize the data: subtract the mean image\n",
    "  mean_image = np.mean(X_train, axis = 0)\n",
    "  X_train -= mean_image\n",
    "  X_val -= mean_image\n",
    "  X_test -= mean_image\n",
    "  X_dev -= mean_image\n",
    "  \n",
    "  # add bias dimension and transform into columns\n",
    "  X_train = np.hstack([X_train, np.ones((X_train.shape[0], 1))])\n",
    "  X_val = np.hstack([X_val, np.ones((X_val.shape[0], 1))])\n",
    "  X_test = np.hstack([X_test, np.ones((X_test.shape[0], 1))])\n",
    "  X_dev = np.hstack([X_dev, np.ones((X_dev.shape[0], 1))])\n",
    "  \n",
    "  return X_train, y_train, X_val, y_val, X_test, y_test, X_dev, y_dev\n",
    "\n",
    "\n",
    "# Invoke the above function to get our data.\n",
    "X_train, y_train, X_val, y_val, X_test, y_test, X_dev, y_dev = get_CIFAR10_data()\n",
    "print 'Train data shape: ', X_train.shape\n",
    "print 'Train labels shape: ', y_train.shape\n",
    "print 'Validation data shape: ', X_val.shape\n",
    "print 'Validation labels shape: ', y_val.shape\n",
    "print 'Test data shape: ', X_test.shape\n",
    "print 'Test labels shape: ', y_test.shape\n",
    "print 'dev data shape: ', X_dev.shape\n",
    "print 'dev labels shape: ', y_dev.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Softmax Classifier\n",
    "\n",
    "Your code for this section will all be written inside **cs231n/classifiers/softmax.py**. \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss: 2.356735\n",
      "sanity check: 2.302585\n"
     ]
    }
   ],
   "source": [
    "# First implement the naive softmax loss function with nested loops.\n",
    "# Open the file cs231n/classifiers/softmax.py and implement the\n",
    "# softmax_loss_naive function.\n",
    "\n",
    "from cs231n.classifiers.softmax import softmax_loss_naive\n",
    "import time\n",
    "\n",
    "# Generate a random softmax weight matrix and use it to compute the loss.\n",
    "W = np.random.randn(3073, 10) * 0.0001\n",
    "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 0.0)\n",
    "\n",
    "# As a rough sanity check, our loss should be something close to -log(0.1).\n",
    "print 'loss: %f' % loss\n",
    "print 'sanity check: %f' % (-np.log(0.1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Inline Question 1:\n",
    "Why do we expect our loss to be close to -log(0.1)? Explain briefly.**\n",
    "\n",
    "**Your answer:** *Fill this in*\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numerical: -5.659514 analytic: -5.659514, relative error: 5.538127e-09\n",
      "numerical: 0.748957 analytic: 0.748957, relative error: 3.528914e-09\n",
      "numerical: -3.485266 analytic: -3.485266, relative error: 5.655554e-09\n",
      "numerical: 0.977469 analytic: 0.977469, relative error: 1.857917e-09\n",
      "numerical: -1.346990 analytic: -1.346990, relative error: 5.071212e-09\n",
      "numerical: 1.057336 analytic: 1.057336, relative error: 1.033407e-08\n",
      "numerical: -0.092285 analytic: -0.092285, relative error: 2.840961e-07\n",
      "numerical: -1.582972 analytic: -1.582972, relative error: 1.324982e-08\n",
      "numerical: -2.464040 analytic: -2.464040, relative error: 8.418225e-09\n",
      "numerical: 1.537562 analytic: 1.537561, relative error: 1.574102e-08\n",
      "numerical: -1.259418 analytic: -1.259418, relative error: 1.981226e-08\n",
      "numerical: -0.085864 analytic: -0.085864, relative error: 1.066718e-07\n",
      "numerical: 3.020670 analytic: 3.020669, relative error: 9.559092e-09\n",
      "numerical: -1.353998 analytic: -1.353998, relative error: 4.556327e-08\n",
      "numerical: 2.063936 analytic: 2.063936, relative error: 4.198355e-08\n",
      "numerical: 2.840691 analytic: 2.840691, relative error: 2.111728e-08\n",
      "numerical: 3.827415 analytic: 3.827415, relative error: 1.806941e-08\n",
      "numerical: -1.735540 analytic: -1.735540, relative error: 6.102614e-08\n",
      "numerical: 2.575143 analytic: 2.575143, relative error: 1.753095e-08\n",
      "numerical: 0.709133 analytic: 0.709133, relative error: 2.779130e-08\n"
     ]
    }
   ],
   "source": [
    "# Complete the implementation of softmax_loss_naive and implement a (naive)\n",
    "# version of the gradient that uses nested loops.\n",
    "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 0.0)\n",
    "\n",
    "# As we did for the SVM, use numeric gradient checking as a debugging tool.\n",
    "# The numeric gradient should be close to the analytic gradient.\n",
    "from cs231n.gradient_check import grad_check_sparse\n",
    "f = lambda w: softmax_loss_naive(w, X_dev, y_dev, 0.0)[0]\n",
    "grad_numerical = grad_check_sparse(f, W, grad, 10)\n",
    "\n",
    "# similar to SVM case, do another gradient check with regularization\n",
    "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 1e2)\n",
    "f = lambda w: softmax_loss_naive(w, X_dev, y_dev, 1e2)[0]\n",
    "grad_numerical = grad_check_sparse(f, W, grad, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "naive loss: 2.356735e+00 computed in 0.237545s\n",
      "vectorized loss: 2.356735e+00 computed in 0.009880s\n",
      "Loss difference: 0.000000\n",
      "Gradient difference: 0.000000\n"
     ]
    }
   ],
   "source": [
    "# Now that we have a naive implementation of the softmax loss function and its gradient,\n",
    "# implement a vectorized version in softmax_loss_vectorized.\n",
    "# The two versions should compute the same results, but the vectorized version should be\n",
    "# much faster.\n",
    "tic = time.time()\n",
    "loss_naive, grad_naive = softmax_loss_naive(W, X_dev, y_dev, 0.00001)\n",
    "toc = time.time()\n",
    "print 'naive loss: %e computed in %fs' % (loss_naive, toc - tic)\n",
    "\n",
    "from cs231n.classifiers.softmax import softmax_loss_vectorized\n",
    "tic = time.time()\n",
    "loss_vectorized, grad_vectorized = softmax_loss_vectorized(W, X_dev, y_dev, 0.00001)\n",
    "toc = time.time()\n",
    "print 'vectorized loss: %e computed in %fs' % (loss_vectorized, toc - tic)\n",
    "\n",
    "# As we did for the SVM, we use the Frobenius norm to compare the two versions\n",
    "# of the gradient.\n",
    "grad_difference = np.linalg.norm(grad_naive - grad_vectorized, ord='fro')\n",
    "print 'Loss difference: %f' % np.abs(loss_naive - loss_vectorized)\n",
    "print 'Gradient difference: %f' % grad_difference"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "iteration 0 / 1500: loss 777.769683\n",
      "iteration 100 / 1500: loss 285.038326\n",
      "iteration 200 / 1500: loss 105.557526\n",
      "iteration 300 / 1500: loss 39.962683\n",
      "iteration 400 / 1500: loss 15.942688\n",
      "iteration 500 / 1500: loss 7.167871\n",
      "iteration 600 / 1500: loss 4.037636\n",
      "iteration 700 / 1500: loss 2.786577\n",
      "iteration 800 / 1500: loss 2.322465\n",
      "iteration 900 / 1500: loss 2.209679\n",
      "iteration 1000 / 1500: loss 2.108596\n",
      "iteration 1100 / 1500: loss 2.059993\n",
      "iteration 1200 / 1500: loss 2.041320\n",
      "iteration 1300 / 1500: loss 2.067483\n",
      "iteration 1400 / 1500: loss 2.105185\n",
      "iteration 0 / 1500: loss 15515.576633\n",
      "iteration 100 / 1500: loss 2.263012\n",
      "iteration 200 / 1500: loss 2.273345\n",
      "iteration 300 / 1500: loss 2.270097\n",
      "iteration 400 / 1500: loss 2.264332\n",
      "iteration 500 / 1500: loss 2.278100\n",
      "iteration 600 / 1500: loss 2.270528\n",
      "iteration 700 / 1500: loss 2.270994\n",
      "iteration 800 / 1500: loss 2.253767\n",
      "iteration 900 / 1500: loss 2.266761\n",
      "iteration 1000 / 1500: loss 2.274116\n",
      "iteration 1100 / 1500: loss 2.266328\n",
      "iteration 1200 / 1500: loss 2.278838\n",
      "iteration 1300 / 1500: loss 2.280839\n",
      "iteration 1400 / 1500: loss 2.270401\n",
      "iteration 0 / 1500: loss 769.299575\n",
      "iteration 100 / 1500: loss 6.901161\n",
      "iteration 200 / 1500: loss 2.103642\n",
      "iteration 300 / 1500: loss 2.102901\n",
      "iteration 400 / 1500: loss 2.037071\n",
      "iteration 500 / 1500: loss 2.066652\n",
      "iteration 600 / 1500: loss 2.087021\n",
      "iteration 700 / 1500: loss 2.109359\n",
      "iteration 800 / 1500: loss 2.073754\n",
      "iteration 900 / 1500: loss 2.092909\n",
      "iteration 1000 / 1500: loss 2.065763\n",
      "iteration 1100 / 1500: loss 2.059374\n",
      "iteration 1200 / 1500: loss 2.101261\n",
      "iteration 1300 / 1500: loss 2.045778\n",
      "iteration 1400 / 1500: loss 2.054664\n",
      "iteration 0 / 1500: loss 15301.358919\n",
      "iteration 100 / 1500: loss 2.277605\n",
      "iteration 200 / 1500: loss 2.283466\n",
      "iteration 300 / 1500: loss 2.273938\n",
      "iteration 400 / 1500: loss 2.271447\n",
      "iteration 500 / 1500: loss 2.270371\n",
      "iteration 600 / 1500: loss 2.276988\n",
      "iteration 700 / 1500: loss 2.280799\n",
      "iteration 800 / 1500: loss 2.284616\n",
      "iteration 900 / 1500: loss 2.289339\n",
      "iteration 1000 / 1500: loss 2.280952\n",
      "iteration 1100 / 1500: loss 2.265285\n",
      "iteration 1200 / 1500: loss 2.276888\n",
      "iteration 1300 / 1500: loss 2.272538\n",
      "iteration 1400 / 1500: loss 2.255418\n",
      "lr 1.000000e-07 reg 5.000000e+04 train accuracy: 0.322449 val accuracy: 0.337000\n",
      "lr 1.000000e-07 reg 1.000000e+06 train accuracy: 0.263061 val accuracy: 0.285000\n",
      "lr 5.000000e-07 reg 5.000000e+04 train accuracy: 0.317592 val accuracy: 0.337000\n",
      "lr 5.000000e-07 reg 1.000000e+06 train accuracy: 0.241653 val accuracy: 0.260000\n",
      "best validation accuracy achieved during cross-validation: 0.337000\n"
     ]
    }
   ],
   "source": [
    "# Use the validation set to tune hyperparameters (regularization strength and\n",
    "# learning rate). You should experiment with different ranges for the learning\n",
    "# rates and regularization strengths; if you are careful you should be able to\n",
    "# get a classification accuracy of over 0.35 on the validation set.\n",
    "from cs231n.classifiers import Softmax\n",
    "results = {}\n",
    "best_val = -1\n",
    "best_softmax = None\n",
    "learning_rates = [1e-7, 5e-7]\n",
    "regularization_strengths = [5e4, 1e6]\n",
    "\n",
    "################################################################################\n",
    "# TODO:                                                                        #\n",
    "# Use the validation set to set the learning rate and regularization strength. #\n",
    "# This should be identical to the validation that you did for the SVM; save    #\n",
    "# the best trained softmax classifer in best_softmax.                          #\n",
    "################################################################################\n",
    "pass\n",
    "from cs231n.classifiers.linear_classifier import Softmax\n",
    "\n",
    "for lr in learning_rates:\n",
    "    for rs in regularization_strengths:\n",
    "        softmax = Softmax()\n",
    "        softmax.train(X_train, y_train, learning_rate = lr, reg=rs, num_iters = 1500,\n",
    "                     verbose = True)\n",
    "        \n",
    "        y_pred_train = softmax.predict(X_train)\n",
    "        acc_train = np.mean(y_pred_train == y_train)\n",
    "        \n",
    "        y_pred_val = softmax.predict(X_val)\n",
    "        acc_val = np.mean(y_pred_val == y_val)\n",
    "        results[(lr, rs)] = (acc_train, acc_val)\n",
    "        \n",
    "        if acc_val > best_val:\n",
    "            best_val = acc_val\n",
    "            best_softmax = softmax\n",
    "################################################################################\n",
    "#                              END OF YOUR CODE                                #\n",
    "################################################################################\n",
    "    \n",
    "# Print out results.\n",
    "for lr, reg in sorted(results):\n",
    "    train_accuracy, val_accuracy = results[(lr, reg)]\n",
    "    print 'lr %e reg %e train accuracy: %f val accuracy: %f' % (\n",
    "                lr, reg, train_accuracy, val_accuracy)\n",
    "    \n",
    "print 'best validation accuracy achieved during cross-validation: %f' % best_val"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "softmax on raw pixels final test set accuracy: 0.336000\n"
     ]
    }
   ],
   "source": [
    "# evaluate on test set\n",
    "# Evaluate the best softmax on test set\n",
    "y_test_pred = best_softmax.predict(X_test)\n",
    "test_accuracy = np.mean(y_test == y_test_pred)\n",
    "print 'softmax on raw pixels final test set accuracy: %f' % (test_accuracy, )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk8AAAF/CAYAAABQVS1eAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXnQbNtZ3ve+a0/d33fuuboS2JEEEpMxZoplQAWxAcvE\nGMxghogASUQA44rBQBQH5GCEbAgqXFhmCNiOBaaYZWQZY5lKhSqRGMtBZVARYohiLCFLV2hCw71n\n+Lr3tFb+6L5n/VbrO8PW7e8cXZ3nV3Wq+vTXw957DXv1+6znfT2lZEIIIYQQ4s4I9/oAhBBCCCGe\nSGjxJIQQQgixAC2ehBBCCCEWoMWTEEIIIcQCtHgSQgghhFiAFk9CCCGEEAu4bxdP7v7Z7v7wvT4O\nIUTG3d/o7n/unOf/jLu/buFn/YS7f/fxjk4IYaaxZXYfL572KMmVEE8AUkqvTin9iXt9HOLucrPF\ntBD3mvt98SREgbtX9/oYxDLUZkI88XmijeMP+sXT/pfL33D333X3d7v7j7t7e87rXuDur3f3K+7+\nO+7+Jfjb17j7v3b373f397j7G9z98/D3y+7+Y+7+Vnd/2N2/x939bp2jyLj7h7n7K9z9ne7+h+7+\nw+7+Ue7+Knd/1/75n3H3y3jPG9392939t83smrt/0I+LD3CefTheD2X289rM3Z/l7q9190fd/WVm\ntrp3pyAOWTo23f2nzOwZZvbK/bz8P97bM7h/udXYcvcvdPffcvf3uvur3f2T8Lenuvs/3bftG9z9\nm/G3F7n7y939p939ETP7mrt7Vo+P++Um8dVm9ufN7KPN7I+b2Xee85rXm9mfTildNrO/bWY/4+5/\nFH9/tpm9zsyeYmbfb2Y/jr/9pJkNZvZRZvas/Xf95SOfg7gN+0XPvzSzN9pu0n26mb1s/+cXm9l/\nYmZ/wsw+zMz+1sHbv9LMPt/MnpRSinfjeMVNudl4PZTZb7SZmVVm9ou2G4tPNrOXm9mX342DFbfn\n/RmbKaXnmdmbzewLU0qXU0p/9y4ftjAzd2/sJmPL3f+k7e6F37D/2/9qZv/C3Zt9AOGVZvZbZvZU\nM/scM/tWd//z+PgvNrNfSCk9ycx+9u6c0XG4XxZP/0tK6a0ppUfM7HttNzkXpJRekVJ6x/7xy83s\nP9huwfQYb0op/eO0Kwb4k2b2VHf/I+7+R2w3gT8/pbRNKb3LzH7QzL7qgs9JvC/Ptt0g/fZ9Wwwp\npf8rpfT7KaVXpZSmlNK7zewHzOyzD977Q/s+0t/1oxaH3Ha87mGbfbqZ1SmlH04pzSmlV5jZb9yt\nAxa35fGMTUXx7y23Glt/xcz+YUrpN9OOnzazx8bjp5nZh6SUvnf/vv9oZj9mux89j/HrKaVXmpk9\n0ebe+l4fwF3iLXj8JtsN4gJ3f56ZPd/MPmL/1KmZfQhe8vbHHqSUNntV7pLtIlGNmb1t/5zv/735\naEcv7pQPt90it4gc7Re4P2Rmn2m7NqvM7D0H732LiQ8Ubjtez3nd08zsDw7+/qZjHpR4XDyesSnu\nLbcaW880s6+BHOe2ux8+zcyimT3d3d+DvwUz+zV8zhPW8X6/RJ4+HI+faWZv5R/d/Rlm9o/M7BtT\nSg+llB4ys9+1O/vF87CZbc3sKSmlJ+/f/6SU0icf6djFnfOwmT3jnD1LL7bdQP6EfXj4v7b3bVs5\nLz9wuOV4BWyzt9lOCiLPOOZBicfF+zs2NS7vPbcaW282s/95f+977P53KaX0T2zX5r9/8LcHU0pf\nhM95wrbv/bJ4+iZ3f7q7P9nMvsOy1v7YID213QB+137j6dea2SfeyQenlN5uZr9iZj/g7g/4jo9y\n98868jmI2/NvbTfQv8/dT9y9c/f/zHa/aK+Z2VV3f7qZfdu9PEhxW243Xs/j181scvdvdvfa3b/M\nStld3Fve37H5dtvtJRX3jluNrR8zs7/q7s82M3P3U3f/i+5+ars2v7o3dqzcvXL3T3D3T703p3Fc\n7pfF08/ZboHzetvtZfre/fPJzCyl9Doze4mZvcZ2g/UTzOzVt/lMrpifZ2atmf2/tgs5v9x2GyDF\nXWQvCXyRmf0x2/0ietjMvsJ2BoBPMbNHbLeB8RWHb72LhyluTbLbjNdzHltKaTSzLzOzrzWzd5vZ\nc+1921ncIx7H2Pw+M3vh3uX8P9y9IxaPcauxlVJ6re3MUT+yl+d+z/auuX2bf6GZ/UnbGQXeaWYv\nNbPL9kGA7/Y/f/Di7m80s69PKf3qvT4WIYQQQjzxuV8iT0IIIYQQR+F+WDx9cIfWhBBCCHFX+aCX\n7YQQQgghjsn9EHkSQgghhDgaF54k8y+/+DU3QltcqW3GOf8n5HqAHY4owpk8pfx45nuhyrnlBKXz\nnF/vTf5QnxFpm6fzPsbGMedxm9vSHV1ZPta24sHmz5rwWREp4bzNJfWqON54HPCZHvL3RZxzXecP\n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\nQgghFqDFkxBCCCHEArR4EkIIIYRYgBZPQgghhBAL0OJJCCGEEGIBWjwJIYQQQixAiychhBBCiAVo\n8SSEEEIIsQAtnoQQQgghFqDFkxBCCCHEArR4EkIIIYRYgBZPQgghhBAL0OJJCCGEEGIBWjwJIYQQ\nQixAiychhBBCiAVo8SSEEEIIsQAtnoQQQgghFqDFkxBCCCHEArR4EkIIIYRYgBZPQgghhBAL0OJJ\nCCGEEGIBWjwJIYQQQixAiychhBBCiAVo8SSEEEIIsQAtnoQQQgghFqDFkxBCCCHEArR4EkIIIYRY\ngBZPQgghhBAL0OJJCCGEEGIBWjwJIYQQQixAiychhBBCiAVo8SSEEEIIsQAtnoQQQgghFqDFkxBC\nCCHEArR4EkIIIYRYgBZPQgghhBAL0OJJCCGEEGIBWjwJIYQQQixAiychhBBCiAVo8SSEEEIIsQAt\nnoQQQgghFqDFkxBCCCHEArR4EkIIIYRYgBZPQgghhBAL0OJJCCGEEGIBWjwJIYQQQixAiychhBBC\niAVo8SSEEEIIsQAtnoQQQgghFqDFkxBCCCHEArR4EkIIIYRYgBZPQgghhBAL0OJJCCGEEGIBWjwJ\nIYQQQixAiychhBBCiAVo8SSEEEIIsQAtnoQQQgghFqDFkxBCCCHEArR4EkIIIYRYgBZPQgghhBAL\n0OJJCCGEEGIBWjwJIYQQQixAiychhBBCiAVo8SSEEEIIsQAtnoQQQgghFqDFkxBCCCHEArR4EkII\nIYRYgBZPQgghhBAL0OJJCCGEEGIBWjwJIYQQQixAiychhBBCiAVo8SSEEEIIsQAtnoQQQgghFqDF\nkxBCCCHEArR4EkIIIYRYgBZPQgghhBAL0OJJCCGEEGIBWjwJIYQQQixAiychhBBCiAVo8SSEEEII\nsQAtnoQQQgghFqDFkxBCCCHEArR4EkIIIYRYgBZPQgghhBAL0OJJCCGEEGIBWjwJIYQQQixAiych\nhBBCiAVo8SSEEEIIsQAtnoQQQgghFqDFkxBCCCHEArR4EkIIIYRYgBZPQgghhBAL0OJJCCGEEGIB\nWjwJIYQQQixAiychhBBCiAVo8SSEEEIIsQAtnoQQQgghFqDFkxBCCCHEArR4EkIIIYRYgBZPQggh\nhBAL0OJJCCGEEGIBWjwJIYQQQixAiychhBBCiAVo8SSEEEIIsQAtnoQQQgghFqDFkxBCCCHEArR4\nEkIIIYRYgBZPQgghhBAL0OJJCCGEEGIBWjztcfefcPfvvtfHIZbj7h/r7r/l7o+6+1+718cj7gx3\nf6O7/7l7fRzi7uLuL3L3n77F33/H3T/rbh6TuPu4e3T3j7rXx/H+Ut/rAxDiCHy7mf1qSulZ9/pA\nhBB3RLrpH1L6xLt5IOLmuPsbzezrU0q/egEff9M+8ERAkSfxwcAzzex3z/uDu6uPfxDj7tW9PgYh\n7keOMPb8KAdyj7hvbyzu/ix3f+1e6nmZma3wt29w9//g7u9y93/u7k/F3z7X3f8/d3+vu/+ou/+f\n7v519+QkhLn7q8zsOWb2o+5+xd1/1t3/vrv/srtfNbM/6+6X3f2n3P2de6nob+L9wd1f4u5/6O5v\ncPdv2oeT79uxcZd5lrv/9n48/by7t2a3HYPR3b/R3X/PzH5v/9wPuPs79uP5t9394/fPt+7+d939\nTe7+tn3f6O7Jmd6HuPsL3P0t+7H5Ond/zv5Pnbv/5P75f+fufwrvuSHn7iW+l7v7y/av/U13/+R7\ncjL3Ge7+U2b2DDP7l/tr/237sfd17v4mM3uVu3+2uz988D62X3D373D31+/H5m+4+9PP+a4/4+5v\nfiLJtfflDcLdGzP7RTP7STN7spm93My+fP+355jZi83svzCzp5rZm83sZfu/fcj+tS8ws6eY2b83\ns8+4y4cvQErpc8zsX5vZN6aULpvZYGZfZWbfk1J6wMz+jZn9iJk9YGYfYWZ/1sye5+5fu/+Iv2Jm\nf8HMPtnM/pSZfYk9wcPJTzCea2afa2YfaWb/qZn9t7cag+AvmdmnmdnHu/vnmtlnmtnHpJQeNLOv\nMLN371/3d8zsY2zXvh9jZk83s++6yBMSO9z9Y83sm8zsU/Zj8y+Y2X/c//mLzOznzOxBM3ulmf3o\nLT7qi83sn5jZQ2b282b2zxVxvHhSSs+z3dj7gn37/cL+T59lZh9nu/Y0u/V8+dfN7L80s8/bj82v\nM7MzvsDdP8/MftbMvjSl9GvHO4OL5b5cPJnZp5tZnVL64ZTSnFJ6hZn9xv5v/5WZ/XhK6bdTSqOZ\n/U9m9unu/gwz+3wz+52U0i+llGJK6YfN7B335AzEIQwB/1JK6TX7x6PtBu/fSCmdpZTeZGYvMbP/\nZv/355rZD6WU3pZSetTMvu+uHbEw2137d6SUHrHdTfRZdv4Y/Iz9GHyMF6eUHk0p9bZr40u2W0h5\nSunfp5QeG5ffYGbP37/2uu3a96vu1snd58xm1prZJ7p7nVJ6c0rpjfu/vTql9L+nlJKZ/bTtFrc3\n47UppV9MKc1m9vdspxJ8+oUeuSCcW5OZvSiltNmPvdvx9Wb2N1NKrzczSyn9u5TSe/H3rzCzf2C7\nxdVrj3bEd4H7dfH0NDP7g4Pn3mS7TvK0/WMzM9tPuO+x3S/Wp5nZwwfve8vFHaZ4P2EbfYjtjBFv\nxnNvsl17mr1vmx62r7hY+OPjzHaLoKfa+47Bd1tuMzOMu5TS/2G76OKPmtk73P0fuvsld/9QMzsx\ns9e6+3vc/T1m9r/ZLmosLpiU0hvM7L83s79lZu9095+D/Pp2vPTMzFa3kMpvjMn9Yustthu34t6w\n5J734Wb2+7f4+7ea2S+klF73+A7p7nO/Lp7eZuVEbLbTdpPtFlUf8diT7n5qu8n2D/bv+/CD933Y\nhR2leH9hGPldtotMPBPPPdPy4vltVrYhoxvi7pPM7K12/hh8y8Hr8n9S+pGU0qea2ceb2R83s2+z\nXdufmdknpJSevP/3pL18IO4CKaWXpZQ+0/K4+jvvx8fcmHPd3W03Xt96hMMTt+c8SY7PXbfdDxQz\nu7GJ/EPx94fN7KNv8dnPNbMvdfdveZzHede5XxdPv25mk7t/s7vX7v5lZvbs/d9eZrt9F5+831j6\nYjN7TUrpzWb2y7YLQX+xu1e+yyn0R+/JGYg7IqUUbafVf+8+GvFMM3u+7aQC2//tW939ae7+JNul\nPRD3lp+388fguVFBd/9Ud3+2u9dmtjGzrZnFfZTipWb2g/solLn70/d7pMQF47v8a8/ZmwAG27XN\nfLOX3+KjPsXdv2R/Y36+7dr3Nbd4vTgebzezx3Ixub1vO/2e7aKGn78ff99pO6n2MX7MzL7H3T/G\nzMzdP8ndH8LnvdXMPsfMvsXd/7sLOocL4b5cPO33UXyZmX2t7eSA55rZK/Z/e5WZvdDM/pntohMf\naWZfuf/bY6/9ftv9qv04M/tNM7sT7VdcHLfb4P0ttotA/L6Z/ZqZ/UxK6Sf2f3upmf2Kmf0/ZvZa\n2y2Qp/2iS1ws57bbPqfMuWPwJu+7bLt2fI+ZvdF2Y/P79397gZm93sxe4+6P2K6tP/ZIxy9uTWe7\nPWZ/aLub5Ifabv/aeaSbPDYz+yXb7Vt8r+32w33pfv+TuHi+z8xeuJe8v9zeN+J7xcy+0cx+3HaR\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fba5f588950>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Visualize the learned weights for each class\n",
    "w = best_softmax.W[:-1,:] # strip out the bias\n",
    "w = w.reshape(32, 32, 3, 10)\n",
    "\n",
    "w_min, w_max = np.min(w), np.max(w)\n",
    "\n",
    "classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n",
    "for i in xrange(10):\n",
    "  plt.subplot(2, 5, i + 1)\n",
    "  \n",
    "  # Rescale the weights to be between 0 and 255\n",
    "  wimg = 255.0 * (w[:, :, :, i].squeeze() - w_min) / (w_max - w_min)\n",
    "  plt.imshow(wimg.astype('uint8'))\n",
    "  plt.axis('off')\n",
    "  plt.title(classes[i])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
